package valueobject

import (
	"regexp"
	"strings"

	"BookStack/pkg/errors"
)

// ValidateUsername 验证用户名格式
func ValidateUsername(username string) error {
	username = strings.TrimSpace(username)
	if username == "" {
		return errors.New(errors.ErrCodeUsernameRequired, "")
	}

	// 检查长度
	if len(username) < 3 || len(username) > 20 {
		if len(username) < 3 {
			return errors.New(errors.ErrCodeUsernameMinLength, "")
		}
		return errors.New(errors.ErrCodeUsernameMaxLength, "")
	}

	// 检查格式：只能包含字母、数字和下划线
	pattern := `^[a-zA-Z0-9_]+$`
	matched, err := regexp.MatchString(pattern, username)
	if err != nil {
		return errors.New(errors.ErrCodeSystem, "")
	}
	if !matched {
		return errors.New(errors.ErrCodeValidation, "用户名格式不正确，只能包含字母、数字和下划线")
	}

	return nil
}
